/* 作业4，7-4 分数类 */
#include <cmath>
#include <iostream>
using namespace std;

template <typename T = long long>  // 类模板，默认模板参数
class Fraction {
 public:
  Fraction(T a = T(), T b = T(1)) : num(a), den(b) { normalize(); }

  void input(std::istream& ist) {
    char c;
    ist >> num >> c >> den >> c;
    normalize();
  }

  void print(std::ostream& ost) const {  // 常性函数
    ost << num << 'z' << den << 'm';
  }

  Fraction operator+(const Fraction& t) const {  // 常性函数
    return Fraction(num * t.den + t.num * den, den * t.den);
  }

 private:
  T num, den;  // 类域和全局域不一样，数据成员到此才定义，但前面可以使用。

  // 求最大公约数。与数据成员无关，设计为静态成员函数。
  static T gcd(T a, T b) { return b ? gcd(b, a % b) : a; }

  void normalize() {  // 正规化
    if (den < 0) {
      num = -num;  // FIXME: 有瑕疵，如果是LONG_MIN则会溢出
      den = -den;  // 溢出?
    }
    if (const T g = std::abs(gcd(num, den)); g != 1) {  // 溢出?
      num /= g;
      den /= g;
    }
  }
};

template <typename T>
std::istream& operator>>(std::istream& ist, Fraction<T>& fs) {
  fs.input(ist);  // 输入操作符，需要修改参数fs，不能是常量。
  return ist;  // 惯例要返回流对象，可以写成串联的表达式。
}

template <typename T>
std::ostream& operator<<(std::ostream& ost, const Fraction<T>& fs) {
  fs.print(ost);
  return ost;
}

int main() {
  int n;
  cin >> n;
  for (Fraction a, b; n > 0 && cin >> a >> b; --n) {
    cout << (a + b) << '\n';
  }
}